package nuc.ss.novel.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @author : zzr
 * @description :这是日期处理的相关方法类
 * @date :2024_12_18
 */
public class DateUtils {

    //格式化日期的方法 -- 返回的是字符串String

    /**
     * 示例用法
     * 例如，如果有一个Date对象表示 2023 年 10 月 1 日，
     * 调用formatDate(date, "yyyy-MM-dd")将返回字符串"2023-10-01"。
     * 这里"yyyy-MM-dd"是日期格式模式，其中yyyy表示四位年份，MM表示两位月份，dd表示两位日期。
     */
    public static String formatDate(Date date, String format) {
        String result = ""; //定义一个空字符串 存储最终格式化后的日期字符串
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        //根据传入的format参数 创建一个SimpleDateFormat对象
        //补充知识：SimpleDateFormat是Java中用来格式化日期的类
        if (date != null) {
            result = sdf.format(date); //如果传入的日期date不为null，则使用SimpleDateFormat创建的对象sdf的format方法
            //将传入的date格式化未字符串，且赋值给result
        }
        return result;
    }

    //也是一个格式化日期的方法 -- 返回的是Date日期类型
    //但这个格式化日期的方法是将一个符合特定格式的字符串解析为Date类型的日期对象
    //例如，如果有一个字符串"2023-10-01"，调用formatString("2023-10-01", "yyyy-MM-dd")将返回一个Date对象，
    public static Date formatString(String str, String format) throws ParseException {

        SimpleDateFormat sdf = new SimpleDateFormat(format); //根据传入的format创建一个SimpleDateFormat对象,用于解析字符串
        //为日期对象
        return sdf.parse(str);//sdf的parse方法来解析传入的str字符串 会根据指定的格式模式来将字符串转换为Date对象
        //解析成功，返回一个Date对象
    }
}

//    //计算两个日期之差
//    public static Long[] getDateBetweenHour(Date endDate, Date nowDate) {
//
//        long nd = 1000 * 24 * 60 * 60; //一天多少毫秒
//        long nh = 1000 * 60 * 60; //一小时多少毫秒
//        long nm = 1000 * 60; // 一分钟多少毫秒
//        long ns = 1000; // 一秒是一千毫秒
//
//        //获得两个时间的毫秒时间差
//        long diff = endDate.getTime() - nowDate.getTime();
//
//        //计算差多少天
//        long day = diff / nd;
//
//        //计算差多少小时
//        long hour = diff % nd / nh;
//
//        //计算差多少分组
//        long min = diff % nd % nh / nm;
//
//        //计算差多少秒
//        //long sec = diff % nd % nh % nm / ns
//        Long[] res = new Long[3];
//        res[0] = day;
//        res[1] = hour;
//        res[2] = min;
//        return res;
//    }
//
//    //获取某年某月所有日期(yyyy-mm-dd格式)
//
//    public List<String> getMonthFullDay (int year, int month) {
//        SimpleDateFormat dateFormatYYYYMMDD = new SimpleDateFormat("yyyy-MM-dd");
//        List<String> fullDayList = new ArrayList<>(32);
//        //获取当前日期对象
//        Calendar cal = Calendar.getInstance();
//        cal.clear(); //清楚信息
//        cal.set(Calendar.YEAR, year);
//        //1月从0开始
//        cal.set(Calendar.MONTH,month - 1);
//        // 当月1号
//        cal.set(Calendar.DAY_OF_MONTH,1);
//        int count = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
//        for (int j = 1; j <= count; j++) {
//            fullDayList.add(dateFormatYYYYMMDD.format(cal.getTime()));
//            cal.add(Calendar.DAY_OF_MONTH,1);
//        }
//        return fullDayList;
//
//    }
//
//}
